package com.situ.javase.day7;

import org.junit.Test;

public class Demo {
	public static void main(String[] args) {
		Student student = new Student();
		//如果子类重写（覆盖）Override了父类的show方法，那么调用的就是子类
		//里面的show方法，如果子类没有覆盖那么调用的还是父类里面的show方法
		student.show();
	}
	
	@Test
	public void test1() {
		Add add = new Add();
		add.setNum1(3);
		add.setNum2(5);
		// 1、如果子类覆盖了getResult方法，那么这里调用的就是子类里面
		// 覆盖的getResult方法。
		// 2、如果子类没有覆盖getResult方法，那么这里调用的就是从父类继承的
		// getResult方法
		int result = add.getResult();
		System.out.println(result);
		
		Add add2 = new Add(3, 5);
		System.out.println(add2.getResult());
	}
	
	@Test
	public void test2() {
		// 你继承什么就是什么，子类对象是可以赋给父类变量
		AbstractCal cal = new Add(3, 5);
		int result1 = cal.getResult();
		System.out.println(result1);//8
		// 让父类变量重新指向了new出来的Div这个对象
		cal = new Div(6, 2);
		int result2 = cal.getResult();
		System.out.println(result2);//3
	}
	
	@Test
	public void test3() {
		// 抽象类是不能够被实例化
		// Cal cal = new Cal(3, 5);
		AbstractCal cal = new Add(3, 5);
		int result = cal.getResult();
		System.out.println(result);
	}
}
